package world.xuewei.config;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;
import world.xuewei.component.LoginHandlerInterceptor;

import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import java.util.Arrays;
import java.util.Collections;

/**
 * 配置MVC相关信息
 *
 * @author XUEW
 */
@Configuration
public class MvcConfig implements WebMvcConfigurer {

   // 添加@Bean注解，确保跨域配置优先级
    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();

        // 允许所有域名
        config.setAllowedOriginPatterns(Collections.singletonList("*"));
        // 允许所有请求方法
        config.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE", "OPTIONS"));
        // 允许所有请求头
        config.setAllowedHeaders(Arrays.asList("*"));
        // 允许携带凭证信息
        config.setAllowCredentials(true);
        // 允许前端获取所有响应头
        config.setExposedHeaders(Arrays.asList("*"));
        config.setMaxAge(3600L);

        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }


//    @Override
//    public void addCorsMappings(CorsRegistry registry) {
//        registry.addMapping("/**")
//                // 允许所有域名
//                .allowedOriginPatterns("*")
//                // 允许所有方法
//                .allowedMethods("*")
//                // 允许所有请求头
//                .allowedHeaders("*")
//                // 允许携带凭证信息（cookie、token等）
//                .allowCredentials(true)
//                // 允许前端获取所有响应头
//                .exposedHeaders("*")
//                // 预检请求有效期
//                .maxAge(3600);
//    }


    // 开放图片访问
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/image/**")
                .addResourceLocations("classpath:/image/");
    }

    /**
     * 注册登录拦截器
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginHandlerInterceptor())
                // 拦截的请求
                .addPathPatterns("/**")
                // 不拦截的请求（放行）
                .excludePathPatterns(
                        "/user/login", "/user/register",
                        "/user/merchant_register", "/commodity/index"
                        , "/alipay/**", "/orders/createNoToken",
                        // 图片
                        "/image/**"
                );
    }
}
